home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / SYSUTIL1.I < prev    next >
Encoding:
Modula Implementation  |  1990-07-19  |  12.0 KB  |  413 lines

  1.  
  2. IMPLEMENTATION MODULE SysUtil1;  (* V#0008 *)
  3.  
  4. (*
  5.   25.10.88  cgr  Peeks und Pokes
  6.   03.12.88  TT   Bit-Funktionen, Kosmetik
  7.   13.06.90  TT   SysCtrl.EnterSupervisorMode-Aufrufe raus
  8.   20.07.90  TT   ByteToBitset & BitsetToByte auf neue Sets angepaßt
  9. *)
  10.  
  11. (*$L-  global ! *)
  12. (*$M-,N+*)
  13. (*$Y+*)
  14. FROM SYSTEM IMPORT ASSEMBLER;
  15.  
  16. FROM SYSTEM IMPORT ADDRESS, ADR, TSIZE, BYTE, WORD, LONGWORD;
  17.  
  18. FROM SysUtil2 IMPORT EnterSupervisorMode, LeaveSupervisorMode;
  19.  
  20. (****************************************************************)
  21. (*                          Super Pokes                         *)
  22. (****************************************************************)
  23.  
  24. PROCEDURE SuperPoke (addr:ADDRESS; REF data:ARRAY OF BYTE);
  25.   BEGIN
  26.     ASSEMBLER
  27.       SUBQ.L    #4,A7
  28.       MOVE.L    A7,(A3)+
  29.       JSR       EnterSupervisorMode   ; Super Weise
  30.       MOVE.W    -(A3),D0      ;  Anzahl der Bytes
  31.       MOVE.L    -(A3),A1      ;  Adresse der Daten
  32.       MOVE.L    -(A3),A0      ;  Adresse für Poke
  33. Schleife:
  34.       MOVE.B    (A1)+,(A0)+        ; Daten kopieren
  35.       DBF       D0,Schleife
  36.       MOVE.L    A7,(A3)+
  37.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  38.       ADDQ.L    #4,A7
  39.     END;
  40.   END SuperPoke;
  41.  
  42. PROCEDURE FastSuperPoke(addr:ADDRESS; VAR data:ARRAY OF BYTE);
  43.   BEGIN
  44.     ASSEMBLER
  45.         JMP     SuperPoke
  46.     END;
  47.   END FastSuperPoke;
  48.  
  49. (****************************************************************)
  50.  
  51. PROCEDURE SuperBPoke (addr:ADDRESS;Data:WORD);
  52.   BEGIN
  53.     ASSEMBLER
  54.       SUBQ.L    #4,A7
  55.       MOVE.L    A7,(A3)+
  56.       JSR       EnterSupervisorMode   ; Super Weise
  57.       MOVE.W      -(A3),D0      ; Daten
  58.       MOVE.L      -(A3),A0      ; Adresse für Poke
  59.       MOVE.B      D0,(A0)       ; Daten kopieren
  60.       MOVE.L    A7,(A3)+
  61.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  62.       ADDQ.L    #4,A7
  63.     END;
  64.   END SuperBPoke;
  65.  
  66. (****************************************************************)
  67.  
  68. PROCEDURE SuperWPoke (addr:ADDRESS; Data:WORD);
  69.   BEGIN
  70.     ASSEMBLER
  71.       SUBQ.L    #4,A7
  72.       MOVE.L    A7,(A3)+
  73.       JSR       EnterSupervisorMode   ; Super Weise
  74.       MOVE.W      -(A3),D0      ; Daten
  75.       MOVE.L      -(A3),A0      ; Adresse für Poke
  76.       MOVE.W      D0,(A0)       ; Daten kopieren
  77.       MOVE.L    A7,(A3)+
  78.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  79.       ADDQ.L    #4,A7
  80.     END;
  81.   END SuperWPoke;
  82.  
  83. (****************************************************************)
  84.  
  85. PROCEDURE SuperLPoke (addr:ADDRESS; Data:LONGWORD);
  86.   BEGIN
  87.     ASSEMBLER
  88.       SUBQ.L    #4,A7
  89.       MOVE.L    A7,(A3)+
  90.       JSR       EnterSupervisorMode   ; Super Weise
  91.       MOVE.L      -(A3),D0      ; Daten
  92.       MOVE.L      -(A3),A0      ; Adresse für Poke
  93.       MOVE.L      D0,(A0)       ; Daten kopieren
  94.       MOVE.L    A7,(A3)+
  95.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  96.       ADDQ.L    #4,A7
  97.     END;
  98.   END SuperLPoke;
  99.  
  100. (****************************************************************)
  101. (*                          Super Peeks                         *)
  102. (****************************************************************)
  103.  
  104. PROCEDURE SuperPeek (addr:ADDRESS; VAR data:ARRAY OF BYTE);
  105.  
  106.   BEGIN
  107.     ASSEMBLER
  108.       SUBQ.L    #4,A7
  109.       MOVE.L    A7,(A3)+
  110.       JSR       EnterSupervisorMode   ; Super Weise
  111.       MOVE.W      -(A3),D0      ;  Anzahl der Bytes
  112.       MOVE.L      -(A3),A1      ;  Adresse der Daten
  113.       MOVE.L      -(A3),A0      ;  Adresse für Peek
  114. Schleife:
  115.       MOVE.B (A0)+,(A1)+        ; Daten kopieren
  116.       DBF D0,Schleife
  117.       MOVE.L    A7,(A3)+
  118.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  119.       ADDQ.L    #4,A7
  120.     END;
  121.   END SuperPeek;
  122.  
  123. (****************************************************************)
  124.  
  125. PROCEDURE SuperBPeek (addr:ADDRESS):CARDINAL;
  126.   BEGIN
  127.     ASSEMBLER
  128.       SUBQ.L    #4,A7
  129.       MOVE.L    A7,(A3)+
  130.       JSR       EnterSupervisorMode   ; Super Weise
  131.       MOVE.L      -(A3),A0      ; Adresse für Peek
  132.       CLR.W       D0            ; D0 Löschen
  133.       MOVE.B      (A0),D0       ; Daten kopieren
  134.       MOVE.W      D0,(A3)+      ; Datum zurückgeben
  135.       MOVE.L    A7,(A3)+
  136.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  137.       ADDQ.L    #4,A7
  138.     END;
  139.   END SuperBPeek;
  140.  
  141. (****************************************************************)
  142.  
  143. PROCEDURE SuperWPeek (addr:ADDRESS):CARDINAL;
  144.   BEGIN
  145.     ASSEMBLER
  146.       SUBQ.L    #4,A7
  147.       MOVE.L    A7,(A3)+
  148.       JSR       EnterSupervisorMode   ; Super Weise
  149.       MOVE.L      -(A3),A0      ; Adresse für Peek
  150.       MOVE.W      (A0),D0       ; Daten kopieren
  151.       MOVE.W      D0,(A3)+      ; Datum zurückgeben
  152.       MOVE.L    A7,(A3)+
  153.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  154.       ADDQ.L    #4,A7
  155.     END;
  156.   END SuperWPeek;
  157.  
  158. (****************************************************************)
  159.  
  160. PROCEDURE SuperLPeek (addr:ADDRESS):LONGCARD;
  161.   BEGIN
  162.     ASSEMBLER
  163.       SUBQ.L    #4,A7
  164.       MOVE.L    A7,(A3)+
  165.       JSR       EnterSupervisorMode   ; Super Weise
  166.       MOVE.L      -(A3),A0      ; Adresse für Peek
  167.       MOVE.L      (A0),D0       ; Daten kopieren
  168.       MOVE.L      D0,(A3)+      ; Datum zurückgeben
  169.       MOVE.L    A7,(A3)+
  170.       JSR       LeaveSupervisorMode ; Ende der Weisheit ?
  171.       ADDQ.L    #4,A7
  172.     END;
  173.   END SuperLPeek;
  174.   
  175.   
  176. (****************************************************************)
  177. (*                        Normale Pokes                         *)
  178. (****************************************************************)
  179.  
  180. PROCEDURE FastPoke (addr:ADDRESS; VAR data:ARRAY OF BYTE);
  181.   BEGIN
  182.     ASSEMBLER
  183.       MOVE.W      -(A3),D0      ;  Anzahl der Bytes
  184.       MOVE.L      -(A3),A1      ;  Adresse der Daten
  185.       MOVE.L      -(A3),A0      ;  Adresse für Poke
  186. Schleife:
  187.       MOVE.B (A1)+,(A0)+        ; Daten kopieren
  188.       DBF D0,Schleife
  189.     END;
  190.   END FastPoke;
  191.  
  192. PROCEDURE Poke (addr:ADDRESS; REF data:ARRAY OF BYTE);
  193.   BEGIN
  194.     ASSEMBLER
  195.         JMP     FastPoke
  196.     END;
  197.   END Poke;
  198.  
  199. (****************************************************************)
  200.   
  201. PROCEDURE BPoke (addr:ADDRESS; Data:WORD);
  202.   BEGIN
  203.     ASSEMBLER
  204.       MOVE.W      -(A3),D0      ; Daten
  205.       MOVE.L      -(A3),A0      ; Adresse für Poke
  206.       MOVE.B      D0,(A0)       ; Daten kopieren
  207.     END;
  208.   END BPoke;
  209.  
  210. (****************************************************************)
  211.  
  212. PROCEDURE WPoke (addr:ADDRESS; Data:WORD);
  213.   BEGIN
  214.     ASSEMBLER
  215.       MOVE.W      -(A3),D0      ; Daten
  216.       MOVE.L      -(A3),A0      ; Adresse für Poke
  217.       MOVE.W      D0,(A0)       ; Daten kopieren
  218.     END;
  219.   END WPoke;
  220.  
  221. (****************************************************************)
  222.  
  223. PROCEDURE LPoke (addr:ADDRESS; Data:LONGWORD);
  224.   BEGIN
  225.     ASSEMBLER
  226.       MOVE.L      -(A3),D0      ; Daten
  227.       MOVE.L      -(A3),A0      ; Adresse für Poke
  228.       MOVE.L      D0,(A0)       ; Daten kopieren
  229.     END;
  230.   END LPoke;
  231.  
  232. (****************************************************************)
  233. (*                        Normale Peeks                         *)
  234. (****************************************************************)
  235.  
  236. PROCEDURE Peek (addr:ADDRESS;VAR data:ARRAY OF BYTE);
  237.   BEGIN
  238.     ASSEMBLER
  239.       MOVE.W      -(A3),D0      ;  Anzahl der Bytes
  240.       MOVE.L      -(A3),A1      ;  Adresse der Daten
  241.       MOVE.L      -(A3),A0      ;  Adresse für Peek
  242. Schleife:
  243.       MOVE.B (A0)+,(A1)+        ; Daten kopieren
  244.       DBF D0,Schleife
  245.     END;
  246.   END Peek;
  247.  
  248. (****************************************************************)
  249.  
  250. PROCEDURE BPeek (addr:ADDRESS):CARDINAL;
  251.   BEGIN
  252.     ASSEMBLER
  253.       MOVE.L      -(A3),A0      ; Adresse für Peek
  254.       CLR.W       D0            ; D0 Löschen
  255.       MOVE.B      (A0),D0       ; Daten kopieren
  256.       MOVE.W      D0,(A3)+      ; Datum zurückgeben
  257.     END;
  258.   END BPeek;
  259.  
  260. (****************************************************************)
  261.  
  262. PROCEDURE WPeek (addr:ADDRESS):CARDINAL;
  263.   BEGIN
  264.     ASSEMBLER
  265.       MOVE.L      -(A3),A0      ; Adresse für Peek
  266.       MOVE.W      (A0),D0       ; Daten kopieren
  267.       MOVE.W      D0,(A3)+      ; Datum zurückgeben
  268.     END;
  269.   END WPeek;
  270.  
  271. (****************************************************************)
  272.  
  273. PROCEDURE LPeek (addr:ADDRESS):LONGCARD;
  274.   BEGIN
  275.     ASSEMBLER
  276.       MOVE.L      -(A3),A0      ; Adresse für Peek
  277.       MOVE.L      (A0),D0       ; Daten kopieren
  278.       MOVE.L      D0,(A3)+      ; Datum zurückgeben
  279.     END;
  280.   END LPeek;
  281.  
  282.  
  283. (****************************************************************)
  284. (*                      Bit - Funktionen                        *)
  285. (****************************************************************)
  286.  
  287.  
  288. PROCEDURE Bit ( addr: ADDRESS; no: BitRange ): BOOLEAN;
  289.   BEGIN
  290.     ASSEMBLER
  291.         MOVE.W  -(A3),D0
  292.         MOVE.L  -(A3),A0
  293.         MOVE.B  (A0),D1
  294.         BTST    D0,D1
  295.         SNE     D0
  296.         ANDI    #1,D0
  297.         MOVE    D0,(A3)+
  298.     END
  299.   END Bit;
  300.  
  301. PROCEDURE BitSet ( addr: ADDRESS; no: BitRange );
  302.   BEGIN
  303.     ASSEMBLER
  304.         MOVE.W  -(A3),D0
  305.         MOVE.L  -(A3),A0
  306.         BSET    D0,(A0)
  307.     END
  308.   END BitSet;
  309.  
  310. PROCEDURE BitClr ( addr: ADDRESS; no: BitRange );
  311.   BEGIN
  312.     ASSEMBLER
  313.         MOVE.W  -(A3),D0
  314.         MOVE.L  -(A3),A0
  315.         BCLR    D0,(A0)
  316.     END
  317.   END BitClr;
  318.  
  319. PROCEDURE BitChg ( addr: ADDRESS; no: BitRange );
  320.   BEGIN
  321.     ASSEMBLER
  322.         MOVE.W  -(A3),D0
  323.         MOVE.L  -(A3),A0
  324.         BCHG    D0,(A0)
  325.     END
  326.   END BitChg;
  327.  
  328.  
  329. PROCEDURE SuperBit ( addr: ADDRESS; no: BitRange ): BOOLEAN;
  330.   BEGIN
  331.     ASSEMBLER
  332.         SUBQ.L  #4,A7
  333.         MOVE.L  A7,(A3)+
  334.         JSR     EnterSupervisorMode   ; Super Weise
  335.         MOVE.W  -(A3),D0
  336.         MOVE.L  -(A3),A0
  337.         MOVE.B  (A0),D1
  338.         BTST    D0,D1
  339.         SNE     D0
  340.         ANDI    #1,D0
  341.         MOVE    D0,(A3)+
  342.         MOVE.L  A7,(A3)+
  343.         JSR     LeaveSupervisorMode ; Ende der Weisheit ?
  344.         ADDQ.L  #4,A7
  345.     END
  346.   END SuperBit;
  347.  
  348. PROCEDURE SuperBitSet ( addr: ADDRESS; no: BitRange );
  349.   BEGIN
  350.     ASSEMBLER
  351.         SUBQ.L  #4,A7
  352.         MOVE.L  A7,(A3)+
  353.         JSR     EnterSupervisorMode   ; Super Weise
  354.         MOVE.W  -(A3),D0
  355.         MOVE.L  -(A3),A0
  356.         BSET    D0,(A0)
  357.         MOVE.L  A7,(A3)+
  358.         JSR     LeaveSupervisorMode ; Ende der Weisheit ?
  359.         ADDQ.L  #4,A7
  360.     END
  361.   END SuperBitSet;
  362.  
  363. PROCEDURE SuperBitClr ( addr: ADDRESS; no: BitRange );
  364.   BEGIN
  365.     ASSEMBLER
  366.         SUBQ.L  #4,A7
  367.         MOVE.L  A7,(A3)+
  368.         JSR     EnterSupervisorMode   ; Super Weise
  369.         MOVE.W  -(A3),D0
  370.         MOVE.L  -(A3),A0
  371.         BCLR    D0,(A0)
  372.         MOVE.L  A7,(A3)+
  373.         JSR     LeaveSupervisorMode ; Ende der Weisheit ?
  374.         ADDQ.L  #4,A7
  375.     END
  376.   END SuperBitClr;
  377.  
  378. PROCEDURE SuperBitChg ( addr: ADDRESS; no: BitRange );
  379.   BEGIN
  380.     ASSEMBLER
  381.         SUBQ.L  #4,A7
  382.         MOVE.L  A7,(A3)+
  383.         JSR     EnterSupervisorMode   ; Super Weise
  384.         MOVE.W  -(A3),D0
  385.         MOVE.L  -(A3),A0
  386.         BCHG    D0,(A0)
  387.         MOVE.L  A7,(A3)+
  388.         JSR     LeaveSupervisorMode ; Ende der Weisheit ?
  389.         ADDQ.L  #4,A7
  390.     END
  391.   END SuperBitChg;
  392.  
  393.  
  394. PROCEDURE ByteToBitset ( b: BYTE ): BITSET;
  395.   BEGIN
  396.     ASSEMBLER
  397.         MOVEQ   #0,D0
  398.         MOVE.B  -2(A3),D0
  399.         MOVE.W  D0,-2(A3)
  400.     END
  401.   END ByteToBitset;
  402.  
  403. PROCEDURE BitsetToByte ( bs: BITSET ): BYTE;
  404.   BEGIN
  405.     ASSEMBLER
  406.         MOVE.B  -1(A3),-2(A3)
  407.     END
  408.   END BitsetToByte;
  409.  
  410. END SysUtil1.
  411. ə
  412. (* $FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$0000051E$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82$FFF1DF82Ç$00000102T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$000000C1$00000102$00002CC7$FFE8D0B8$00000102$00002D4B$00000102$FFE8D0B8$00002CB6$00002C90$00002CB6$00002D48$00002C55$00002D48$00002D26$00002D30£Çü*)
  413.